Don't reset window hints when showing multiple times
authorAlexander Larsson <alexl@redhat.com>
Tue, 16 Jun 2009 19:34:37 +0000 (21:34 +0200)
committerAlexander Larsson <alexl@redhat.com>
Tue, 16 Jun 2009 19:34:37 +0000 (21:34 +0200)
gdk_window_show() should only set the initial hints on the first
run, not if the window is already mapped when gdk_window_show is
called.

gdk/gdkwindow.c
gdk/gdkwindowimpl.h
gdk/x11/gdkwindow-x11.c

index 307745f2d4f067ad9825ceb06cb892bdf6199354..ce478b54210db0aa47e532c2a45cde29d6081d5f 100644 (file)
@@ -1548,7 +1548,7 @@ gdk_window_ensure_native (GdkWindow *window)
   GDK_WINDOW_IMPL_GET_IFACE (private->impl)->input_shape_combine_region ((GdkWindow *)private, private->input_shape, 0, 0);
 
   if (gdk_window_is_viewable (window))
-    GDK_WINDOW_IMPL_GET_IFACE (private->impl)->show (window);
+    GDK_WINDOW_IMPL_GET_IFACE (private->impl)->show (window, FALSE);
 
   return TRUE;
 }
@@ -5684,7 +5684,7 @@ gdk_window_raise_internal (GdkWindow *window)
 }
 
 static void
-show_all_visible_impls (GdkWindowObject *private)
+show_all_visible_impls (GdkWindowObject *private, gboolean already_mapped)
 {
   GdkWindowObject *child;
   GList *l;
@@ -5693,11 +5693,11 @@ show_all_visible_impls (GdkWindowObject *private)
     {
       child = l->data;
       if (GDK_WINDOW_IS_MAPPED (child))
-       show_all_visible_impls (child);
+       show_all_visible_impls (child, FALSE);
     }
 
   if (gdk_window_has_impl (private))
-    GDK_WINDOW_IMPL_GET_IFACE (private->impl)->show ((GdkWindow *)private);
+    GDK_WINDOW_IMPL_GET_IFACE (private->impl)->show ((GdkWindow *)private, already_mapped);
 }
 
 static void
@@ -5731,7 +5731,7 @@ gdk_window_show_internal (GdkWindow *window, gboolean raise)
     }
 
   if (gdk_window_is_viewable (window))
-    show_all_visible_impls (private);
+    show_all_visible_impls (private, was_mapped);
 
   if (!was_mapped)
     {
index db1c2ac96f040a52a212a66de30e301ac852dc97..5905de80f3f9f21693a54dc19a8b8efca73b949b 100644 (file)
@@ -43,7 +43,8 @@ struct _GdkWindowImplIface
 {
   GTypeInterface g_iface;
 
-  void         (* show)                 (GdkWindow       *window);
+  void         (* show)                 (GdkWindow       *window,
+                                        gboolean         already_mapped);
   void         (* hide)                 (GdkWindow       *window);
   void         (* withdraw)             (GdkWindow       *window);
   void         (* raise)                (GdkWindow       *window);
index 291d25d46b6d357059e9441ce5260f421d8d1baf..0f3ef1cf51563f733011b20a67430308b9c0156e 100644 (file)
@@ -1298,7 +1298,7 @@ set_initial_hints (GdkWindow *window)
 }
 
 static void
-gdk_window_x11_show (GdkWindow *window)
+gdk_window_x11_show (GdkWindow *window, gboolean already_mapped)
 {
   GdkWindowObject *private = (GdkWindowObject*) window;
   GdkDisplay *display;
@@ -1308,8 +1308,9 @@ gdk_window_x11_show (GdkWindow *window)
   Display *xdisplay = GDK_WINDOW_XDISPLAY (window);
   Window xwindow = GDK_WINDOW_XID (window);
   gboolean unset_bg;
-      
-  set_initial_hints (window);
+
+  if (!already_mapped)
+    set_initial_hints (window);
       
   if (WINDOW_IS_TOPLEVEL (window))
     {